﻿// Copyright (c) 2012 Mokah Nnamezie & Andrew Cooper
// Neo4Net graph database - http://neo4net.codeplex.com
//
// This file is part of Neo4Net - a .Net port of the Neo4j graph database
//
// Neo4Net is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

namespace Neo4Net.Kernel.Impl.Nioneo.Store
{
    public interface IIdGenerator
    {
        long NextId { get; }
        IdRange NextIdBatch(int size);
        long HighId { get; set; }
        void FreeId(long id);

        /// Closes the id generator.
        /// <param name="shutdown"> <c>true</c> if this is during shutdown of the database, <c>false</c>
        /// if it's an intermediary close, f.ex after rebuilding id generators at startup.</param>
        void Close(bool shutdown);
        long NumberOfIdsInUse { get; }
        long DefragCount { get; }
        void Delete();
    }
}
